package io.github.weiranyi.topic;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.MessageProperties;
import io.github.weiranyi.utils.ConnectionUtil;

/**
 * @Description
 * @Return
 * @Author https://weiranyi.github.io
 * @Date Created in 2022-12-19 21:53
 **/
public class Sender {
    public static void main(String[] args) throws Exception {
        // 1.得到连接
        Connection connection = ConnectionUtil.getConnection();
        // 2.得到连接中的（信道）
        Channel channel = connection.createChannel();
        // 3. 声明交互机/路由(名字，模式，是否持久化)【交换机持久化】
        /**
         * fanout: 不处理路由key，广播模式，绑定到该路由的队列都可收到消息
         * direct：定向，路由模式
         */
        channel.exchangeDeclare("topicName", "topic", true);
        channel.txSelect(); // 开启事务
        // 4. 向交换机/路由发送消息
        /**
         * arg0: 交换机名，简单模式（P2P，没有交换机）
         * arg1：目标队列名称
         * arg2：设置消息属性（没有设置为null） 【消息持久化】 MessageProperties.PERSISTENT_TEXT_PLAIN
         * arg3：消息内容（只接受字节数组）
         */
        try {
            channel.basicPublish("topicName", "R1.weiranyi", MessageProperties.PERSISTENT_TEXT_PLAIN, "走路由1".getBytes());
            int i = 1 / 0;
            channel.basicPublish("topicName", "R1.weiranyi", MessageProperties.PERSISTENT_TEXT_PLAIN, "走路由2".getBytes());
            channel.txCommit(); // 提交事务（一起成功）
        } catch (Exception e) {
            System.out.println("消息撤回");
            e.printStackTrace();
            channel.txRollback(); //回滚（一起失败）
        } finally {
            // 5.释放资源
            channel.close();
            connection.close();
        }
    }
}
